Objective-c 面向对象设计


##定义类

  • oc的类的定义具有两个部分:接口部分(interface section)和实现部分(implementation section)
  • 接口部分

    @interface classname : superclassname(NSObject:几乎所有的oc类都是NSObject的直接或者间接子类){
    instance variable declarations  //类的实例变量声明
    }  
    method declarations //方法声明 方法如下:
    //- (return type) method_name:(argument_type) argument
    @end
    


    前导连接字符(-)指示这些是实例方法。连字符后面接着将由方法返回的值的类型,并用圆括号括住它。还有可能定义被类本身执行的类的方法。类方法以加号(+)开头

  • 实现部分

    @implementation classname
    -(return type) 方法名{
    实现方法的代码}
    @end
    

  • 调用方法
    消息表达式的形式:

    [receiver message]
    


    receiver是想要用于执行方法的对象,它称为接收者,因为它将接受消息。message是执行方法的名称,以及提供给该方法的参数。ex:使用Accumulator类的一个实例作为示列,下面一行代码将把137加到anAccumulator的总和上:

    [anAccumulator addToTotal: 137];
    


    下面一行代码将获取anAccumulator的总和的当前值,并把他存储在一个名为currentTotal的变量中:

    int currentTotal = [anAccumulator total];
    

  • 类对象和对象创建 初始化实例的语法

classname *变量 = [[classname alloc] init];

1、将把alloc消息发送给用于classname类的类对象
2、alloc类方法为classname对象分配内存,并返回一个指向未初始化的对象的指针
3、未初始化的classname 对象变成init消息的接收者。init是classname从NSObject继承的一个实例方法
4、init返回一个指针,它指向现在初始化的Accumulator对象,然后将把它赋予变量

  • 内存管理
    retain 和 release方法分别用于递增和递减对象的保留记数:

    [anObject retain]; //Increments anObject's retain count
    [anObject release]; //Decrements anObject's retain count
    


    在创建对象时,其保留记数为1。如果利用其名称以“alloc”、“new”、”copy”或“mutableCopy”开头的方法创建一个对象。当用完该对象后,必须通过给他发送一条release信息来抵消它的创建

    oc补充

  • 编译器指令 以字符“@”开头的单词是编译器指令,而不是可执行代码。@interface标记类定义的借口部分开始,@implementation标记实现部分的开始,而@end则用于标记这些部分的结尾
  • oc的关键字

1、id

id是一种保存“指向对象的指针”的类型

2、nil

nil是一个定义的常量,代表“不指向对象的指针”。虽然nil被定义为0,但无论何时需要一个不指向任何内容的对象指针时,一般都使用它代替单纯的0。

3、SET

SET是一种保存oc方法名的表示的类型。SET是selector(选择器)的简写。方法名有时称为选择器,因为运行库使用它们选择要执行的代码块来响应消息。

4、IMP

IMP是“指向函数的指针的typedef,该函数接受id,SET参数,可能还有其他一些参数,并且返回id”

  • 框架

oc与许多动态链接库(框架)密切合作。AppKit框架在OS X上提供了用于窗口、视图、控件及其他用户界面类;UIKit框架则为iOS提供了这些项目。Foundation和AppKit的结合被称为Cocoa;Foundation和UIKit的结合则称为Cocoa Touch

  • 框架数值类型

框架数值类型:NSInteger替换了框架中出现的大多数int;NSUInteger是NSInteger的无符号版本;CGFloat用于代替float;NSLog是一个由Foundation框架定义的用于自负输出的函数。NSLog类似于printf,但还是有以下区别:1、NSLog把输出写到控制台日志以及终端窗口。2、NSLog的格式字符串是字面量NSString,而不是C语言的字面量字符串。3、在打印后,NSLog将自动推进到下一行。无需在格式字符串的末尾添加“\n”。4、NSLog使用一个额外的转换说明符“%@”,它接受一个Objective-C对象作为他的参数。